package com.ljt.springbootwebsocketdemo.starterType;

import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;

import java.util.Map;

/**
 * 这个是websocket了。不属于springmvc的事情，有一个专门的拦截器
 * 来拦截，这里可以做登录验证
 * 一般都是要的。
 */
@Component
public class MyHandshakeInterceptor implements HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
        // 这个给了代码示例
        // System.out.println("握手开始");
        // // 获得请求参数
        // HashMap<String, String> paramMap = HttpUtil.decodeParamMap(request.getURI().getQuery(), "utf-8");
        // String uid = paramMap.get("token");
        // if (StrUtil.isNotBlank(uid)) {
        //     // 放入属性域
        //     attributes.put("token", uid);
        //     System.out.println("用户 token " + uid + " 握手成功！");
        //     return true;
        // }
        // System.out.println("用户登录已失效");
        // return false;

        // 如果没有的话，先不要拦截，直接true放行
        return true;
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
        // 握完手（验证登录态后，如果还有事情，可以放到这里，不过一般没什么事情做）
    }
}